home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok19 / smallinout / smallinout.mod < prev    next >
Text File  |  1993-11-04  |  2KB  |  100 lines

  1. (*---------------------------------------------------------------------------
  2.   :Program.    SmallInOut.mod
  3.   :Author.     Fridtjof Siebert
  4.   :Address.    Nobileweg 67, D-7-Stgt-40
  5.   :Phone.      (0)711/822509
  6.   :Shortcut.   [fbs]
  7.   :Version.    1.0
  8.   :Date.       15-May-89
  9.   :Copyright.  PD
  10.   :Language.   Modula-II
  11.   :Translator. M2Amiga v3.1d
  12.   :Contents.   Small replacement of InOut
  13. ---------------------------------------------------------------------------*)
  14.  
  15. IMPLEMENTATION MODULE SmallInOut; (* $R- $S- $V- *)
  16.  
  17. FROM SYSTEM IMPORT ADR;
  18. FROM Arts   IMPORT wbStarted, Assert;
  19. FROM ASCII  IMPORT eof,lf;
  20. IMPORT Dos;
  21.  
  22. VAR
  23.   out,in: Dos.FileHandlePtr;
  24.   l: LONGINT;          (* dummy *)
  25.  
  26. PROCEDURE Length(s: ARRAY OF CHAR): LONGINT;
  27. BEGIN l := 0; WHILE (l<=HIGH(s)) AND (s[l]#0C) DO INC(l) END; RETURN l;
  28. END Length;
  29.  
  30. PROCEDURE Write(ch: CHAR);
  31. BEGIN l := Dos.Write(out,ADR(ch),1) END Write;
  32.  
  33. PROCEDURE WriteLn;
  34. BEGIN Write(12C) END WriteLn;
  35.  
  36. PROCEDURE WriteString(str: ARRAY OF CHAR);
  37. BEGIN l := Dos.Write(out,ADR(str),Length(str)) END WriteString;
  38.  
  39. PROCEDURE WriteInt(x: LONGINT; n: INTEGER);
  40. BEGIN
  41.   IF x<0 THEN Write("-"); x := -x; DEC(n) END;
  42.   IF n>1 THEN IF x>9 THEN WriteInt(x DIV 10,n-1); x := x MOD 10
  43.                      ELSE WHILE n>1 DO Write(" "); DEC(n) END END;
  44.   END;
  45.   Write(CHAR(x+ORD("0")));
  46. END WriteInt;
  47.  
  48. PROCEDURE WriteHex(x: LONGINT; n: INTEGER);
  49. BEGIN
  50.   IF x<0 THEN Write("-"); x := -x; DEC(n) END;
  51.   IF n>1 THEN WriteHex(x DIV 16,n-1); x := x MOD 16 END;
  52.   IF x>9 THEN Write(CHAR(x+55)) ELSE Write(CHAR(x+ORD("0"))) END;
  53. END WriteHex;
  54.  
  55. PROCEDURE Read(VAR ch: CHAR);
  56. BEGIN IF Dos.Read(in,ADR(ch),1)#1 THEN ch := eof END;
  57. END Read;
  58.  
  59. PROCEDURE ReadString(VAR str: ARRAY OF CHAR);
  60. VAR i: LONGINT;
  61. BEGIN
  62.   i := 0;
  63.   REPEAT
  64.     Read(str[i]);
  65.     IF str[i]=lf THEN str[i] := 0C; RETURN END;
  66.     INC(i);
  67.   UNTIL i=HIGH(str);
  68. END ReadString;
  69.  
  70. PROCEDURE ReadLongInt(VAR x: LONGINT);
  71. VAR
  72.   ch: CHAR;
  73.   d: INTEGER;
  74.   neg: BOOLEAN;
  75. BEGIN
  76.   x := 0;
  77.   neg := FALSE;
  78.   WHILE (ch#lf) AND (ch#eof) AND (ch#0C) DO
  79.     IF ch="-" THEN neg := TRUE;
  80.     ELSIF (ch>="0") AND (ch<="9") THEN
  81.       d := ORD(ch)-ORD("0");
  82.       IF (MAX(LONGINT)-d) DIV 10 >= x THEN x := 10*x+d END;
  83.     END;
  84.     Read(ch);
  85.   END;
  86.   IF neg THEN x := -x END;
  87. END ReadLongInt;
  88.  
  89. PROCEDURE ReadInt(VAR x: INTEGER);
  90. BEGIN
  91.   ReadLongInt(l);
  92.   x := l REM 32768;
  93. END ReadInt;
  94.  
  95. BEGIN
  96.   Assert(NOT wbStarted,ADR("Use CLI!"));
  97.   out := Dos.Output(); in := Dos.Input();
  98. END SmallInOut.
  99.  
  100.